package br.com.fiap.atividade5.jbossAOP;

import java.math.BigDecimal;

import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.joinpoint.Invocation;
import org.jboss.aop.joinpoint.MethodInvocation;

import br.com.fiap.atividade5.entity.PedidoProduto;

public class CalcDescontoValorVendaInterceptor implements Interceptor {

	@Override
	public String getName() {
		return CalcDescontoValorVendaInterceptor.class.getSimpleName();
	}

	@Override
	public Object invoke(Invocation invocation) throws Throwable {
		
		if (!(invocation instanceof MethodInvocation)) {
			return invocation.invokeNext();
		}
		
		MethodInvocation mi = (MethodInvocation) invocation;
		PedidoProduto pp = (PedidoProduto) mi.getArguments()[0];
		
		System.out.println("Inicio do calculo do valor do produto para o pedido de numero " + pp.getPedido().getNumeroPedido());
		
		mi.invokeNext();
		
		calcValorPedidoProduto(pp);
		
		System.out.println("Fim do calculo do valor do produto para o pedido de numero " + pp.getPedido().getNumeroPedido());
		
		return null;
	}
	
	private void calcValorPedidoProduto(PedidoProduto pp) {
		
		BigDecimal valorTotal = pp.getTotal();
		
		if (pp.getProduto().isInPromocao()) {
			BigDecimal descontoPromocional = new BigDecimal("100");
			valorTotal = valorTotal.subtract(descontoPromocional);
			pp.setDesconto(descontoPromocional);
		}
		
		if (new BigDecimal("1000").compareTo(valorTotal) < 0) {
			pp.setDesconto(pp.getDesconto().add(valorTotal.multiply(new BigDecimal("0.05"))));
			valorTotal = valorTotal.multiply(new BigDecimal("0.95"));
		}
		
		pp.setTotal(valorTotal);
		
	}

}
